const fs = require('fs');
const path = require('path');
const express = require('express');
const mongoose = require('mongoose');
const sha1 = require('sha1');

const UserModel = mongoose.model('users');
const check = require('../models/check');

const router = express.Router();

// 注册页
router.post('/', check.NeedNoLogin, (req, res) => {
  // try {
  //   if (req.files === {}) throw new Error('请求不合法 禁止操作')
  // } catch (e) {
  //   console.log('sssssssssssssssssssssssssssssssssssssss')
  //   req.flash('error', e.message)
  //   return res.redirect('/')
  // }
  // console.log(typeof (req.files))
  const users = {
    name: req.fields.username,
    password: req.fields.password,
    repassword: req.fields.repassword,
    email: req.fields.email,
    iconurl: req.files.icon.path,
    iconnowname: req.files.icon.path.split(path.sep).pop(),
    iconpastname: req.files.icon.name,
    profile: req.fields.profile,
  };

  // 查询用户名是否为重复
  UserModel.findOne({ name: users.name }, (err, auser) => {
    try {
      if (!(users.name.length >= 1 && users.name.length < 10)) throw new Error('注册失败：用户名需要控制在十个字符之内');
      if (auser) throw new Error('注册失败：用户名重复');
      if (users.password.length < 6) throw new Error('注册失败：密码至少 6 个字符');
      if (!(users.repassword === users.password)) throw new Error('注册失败：两次输入的密码不相同');
      if (!users.iconpastname) throw new Error('注册失败：没有上传你的头像');
      if (!(users.profile.length <= 30)) throw new Error('注册失败：个人简介请限制在 1-30 个字符');
      if (err) throw new Error('`UserModule.findOne()`内部错误');
    } catch (e) {
      fs.unlink(users.iconurl, (error) => {
        if (error) throw error;
      });
      req.flash('error', e.message);
      return res.redirect('/index=1');
    }

    const sha1password = sha1(users.password); // password 加密
    // mongoose 中的创建具体的文档的方法 
    const user = new UserModel({
      name: users.name,
      password: sha1password,
      email: users.email,
      icon: users.iconnowname, // 头像
      profile: users.profile, // 简介
    });
    UserModel.create(user).then(
      (saveuser) => { // 毕竟还没有学promise，这个then（）调用之后就不产生回调的问题，也就不会有error这个参数
        req.session.user = saveuser;
        req.flash('success', '注册成功');
        return res.redirect('/index=1');
      });
  });
});

module.exports = router;
